﻿using ICSharpCode.SharpZipLib.Zip;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace PacoToolKit.Zip
{
    public class Common
    {
        /// <summary>
        /// 打包文件
        /// </summary>
        /// <param name="fileUrls">文件地址</param>
        /// <returns></returns>
        public static byte[] ZipFilesToBuffer(IEnumerable<string> fileUrls)
        {
            //根据所选文件打包下载
            MemoryStream ms = new MemoryStream();
            byte[] buffer = null;

            //解决中文文件名乱码的问题
            System.Text.Encoding gbk = System.Text.Encoding.GetEncoding("gbk");
            ZipConstants.DefaultCodePage = gbk.CodePage;
            using (ZipFile file = ZipFile.Create(ms))
            {
                file.BeginUpdate();
                file.NameTransform = new MyNameTransfom();//通过这个名称格式化器，可以将里面的文件名进行一些处理。默认情况下，会自动根据文件的路径在zip中创建有关的文件夹。
                foreach (var url in fileUrls)
                {
                    file.Add(url);
                }

                file.CommitUpdate();

                buffer = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(buffer, 0, buffer.Length);
            }

            return buffer;
        }
    }

    public class MyNameTransfom : ICSharpCode.SharpZipLib.Core.INameTransform
    {
        #region INameTransform 成员

        public string TransformDirectory(string name)
        {
            return null;
        }

        public string TransformFile(string name)
        {
            return Path.GetFileName(name);
        }

        #endregion
    }
}
